0371. 两整数之和【中等】
1. 📝 题目描述
给你两个整数 a 和 b,不使用 运算符 + 和 - ,计算并返回两整数之和。
示例 1:
txt
输入:a = 1, b = 2
输出:31
2
2
示例 2:
txt
输入:a = 2, b = 3
输出:51
2
2
提示:
-1000 <= a, b <= 1000
2. 🎯 s.1 - 位运算
c
int getSum(int a, int b) {
while (b != 0) {
unsigned carry = (unsigned)(a & b) << 1;
a = a ^ b;
b = (int)carry;
}
return a;
}1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
js
/**
* @param {number} a
* @param {number} b
* @return {number}
*/
var getSum = function (a, b) {
while (b !== 0) {
const carry = (a & b) << 1
a = a ^ b
b = carry
}
return a
}1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
py
class Solution:
def getSum(self, a: int, b: int) -> int:
MASK = 0xFFFFFFFF
MAX = 0x7FFFFFFF
while b != 0:
carry = ((a & b) << 1) & MASK
a = (a ^ b) & MASK
b = carry
return a if a <= MAX else ~(a ^ MASK)1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 时间复杂度:
,最多循环 32 次 - 空间复杂度:
算法思路:
- 异或
a ^ b得到无进位和,与(a & b) << 1得到进位 - 重复直到进位为 0